<?php

namespace wechat\src;

/**
 * 其它方法类
 */
class Base extends SrcAbstract {
    /**
     * ***************************************  缓存相关操作方法  ***************************************************
     */

    /**
     * 取得缓存路径
     */
    protected function getCachePath() {
        $cacheName = md5($this->wechat->appid);
        return dirname(dirname(__FILE__)) . "/cache/{$cacheName}.cache";
    }

    /**
     * 取得所有缓存内容
     */
    protected function getCacheValues() {
        $filename = $this->getCachePath();
        if (file_exists($filename)) {
            $string = file_get_contents($filename);
            return unserialize($string);
        } else {
            return [];
        }
    }

    /**
     * 更新（保存）所有缓存内容
     */
    protected function setCacheValues($values) {
        if (empty($values)) {
            return false;
        } else {
            $filename = $this->getCachePath();
            file_put_contents($filename, serialize($values));
            return true;
        }
    }

    /**
     * 缓存方法 - 设置
     * @param string $key 键名
     * @param mixed $value 值
     * @param integer $expire 有效时间，0为永久。
     */
    public function setCache($key, $value, $expire = 0) {
        $values = $this->getCacheValues();
        if (empty($expire)) {
            $expireTime = 0;
        } else {
            $expireTime = time() + $expire;
        }
        $values[$key] = [
            'value' => $value,
            'expire' => $expireTime
        ];
        return $this->setCacheValues($values);
    }

    /**
     * 缓存方法 - 取得
     * @param string $key 键名
     */
    public function getCache($key) {
        $values = $this->getCacheValues();
        if (isset($values[$key])) {
            $expireTime = $values[$key]['expire'];
            if ($expireTime >= time() || $expireTime == 0) {
                return $values[$key]['value'];
            } else {
                return null;
            }
        } else {
            return null;
        }
    }

    /**
     * 缓存方法 - 删除
     * @param string $key 键名
     */
    public function rmCache($key) {
        $values = $this->getCacheValues();
        if (isset($values[$key])) {
            unset($values[$key]);
        }
    }

    /**
     * 缓存方法 - 清除
     */
    public function clearCache() {
        $filename = $this->getCachePath();
        @unlink($filename);
    }

}
